package lambdda2;

public class LambdaDemo2 {
    public static void main(String[] args) {

        NOAny no1 = new LambdaDemo2()::sh;//引用的是当前类中的方法
        no1.show();

        NOAny no2 = LambdaDemo2::show; //引用的是类中的静态方法
        no2.show();

        //lambda表达式的引用
        NOAny noAny = Student::new; //引用的是student的构造方法
        noAny.show();

        NOreturn1 nr1 = Student::new;//引用的是student的单参数构造方法
        nr1.show(10);

        NOreturn2 nr2 = Student::new;//引用的是student的满参构造方法
        nr2.show(10,20);

        YESreturn1 yr1 = Student::new;//引用的是student的无参构造方法
        System.out.println(yr1.show());

        YESreturn2 yr2 = Student::new;//引用的是student的单参数构造方法
        System.out.println(yr2.show(10));

        YESreturn3 yr3 = Student::new;//引用的是student的满参构造方法
        Student show = yr3.show(10, 20);
        System.out.println(show);

    }
    public static void show(){
        System.out.println("我是类方法");
    }
    public void sh(){
        System.out.println("我是对象方法");
    }
}

//定义一个函数式接口，无参数，无返回值
@FunctionalInterface
interface NOAny{
    void show();
}
//定义一个函数式接口，单参数，无返回值
@FunctionalInterface
interface NOreturn1{
    void show(int a);
}
//定义一个函数式接口，多参数，无返回值
@FunctionalInterface
interface NOreturn2{
    void show(int a,int b);
}
//定义一个函数式接口，无参数，有返回值
@FunctionalInterface
interface YESreturn1{
    Student show();
}
//定义一个函数式接口，单参数，有返回值
@FunctionalInterface
interface YESreturn2{
    Student show(int a);
}
//定义一个函数式接口，多参数，有返回值
@FunctionalInterface
interface YESreturn3{
    Student show(int a,int b);
}